﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using InmobiliariaNegocio;

namespace InmobiliariaIntefaz
{
    public partial class frmReservar : Form
    {
        private Inmobiliaria inmobiliaria;

        public frmReservar(Inmobiliaria inmob)
        {
            InitializeComponent();

            inmobiliaria = inmob;
        }

        private void frmReservar_Load(object sender, EventArgs e)
        {
            cargarDisponibles();
            cargarClientes();

            inmobiliaria.eliminarPorVencimiento();

            CargarGrilla();

            txtMontoDesposito.Text = "0";
        }

        private void btnReservar_Click(object sender, EventArgs e)
        {
            if (validar())
            {
                int numero = inmobiliaria.darContadorOperaciones();
                Reserva reserva = new Reserva(numero, DateTime.Now, float.Parse(txtMontoDesposito.Text), ((Cliente)ddlClientes.SelectedItem).Dni, ((Inmueble)ddlDisponibles.SelectedItem).Numero);
                
                reserva.guardarseBD();
                reserva.reservarInmuebleBD();

                if (inmobiliaria.validarReserva(reserva))
                {
                    inmobiliaria.modificarInmueble(reserva.Inmueble, true, "");
                    MessageBox.Show(inmobiliaria.agregarReserva(reserva));
                }
                else
                    MessageBox.Show("El inmueble se encuentra reservado.");

                BindingSource source = new BindingSource();
                grvReservas.AutoGenerateColumns = true;
                source.DataSource = inmobiliaria.listarReservas();
                grvReservas.DataSource = source;

                cargarDisponibles();
            }
        }

        private bool validar()
        {
            if (ddlClientes.Items.Count == 0)
            {
                MessageBox.Show("Debe seleccionar al menos un cliente.");
                return false;
            }

            if (ddlDisponibles.Items.Count == 0)
            {
                MessageBox.Show("No hay inmuebles disponibles.");
                return false;
            }

            try
            {
                int.Parse(txtMontoDesposito.Text);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Los datos del monto deben ser numéricos.");
                return false;
            }

            if (int.Parse(txtMontoDesposito.Text) <= 0)
            {
                MessageBox.Show("El monto debe ser mayor que cero.");
                return false;
            }

            return true;
        }

        private void cargarDisponibles()
        {
            ddlDisponibles.DataSource = inmobiliaria.listarInmueblesReserva();
        }

        private void cargarClientes()
        {
            ddlClientes.DataSource = inmobiliaria.listarClientes();
        }

        private void tsbConsultar_Click(object sender, EventArgs e)
        {
            CargarGrilla();
        }

        private void CargarGrilla()
        {
            BindingSource source = new BindingSource();
            grvReservas.AutoGenerateColumns = true;
            source.DataSource = inmobiliaria.listarReservas();
            grvReservas.DataSource = source;
        }

        private void ddlClientes_KeyDown(object sender, KeyEventArgs e)
        {
            e.SuppressKeyPress = true;
        }

        private void ddlDisponibles_KeyDown(object sender, KeyEventArgs e)
        {
            e.SuppressKeyPress = true;
        }
    }
}
